testoffscreen: Connect to draw signal
authorBenjamin Otte <otte@redhat.com>
Wed, 8 Sep 2010 23:52:14 +0000 (01:52 +0200)
committerBenjamin Otte <otte@redhat.com>
Sun, 26 Sep 2010 13:11:41 +0000 (15:11 +0200)
tests/testoffscreen.c

index ad2c1a0f674db6c8459434fde63b6d2e8deebe98..e3f3223eb7d4822e7404c538e5a5d65e45b5238e 100644 (file)
@@ -20,26 +20,29 @@ combo_changed_cb (GtkWidget *combo,
 }
 
 static gboolean
-layout_expose_handler (GtkWidget      *widget,
-                       GdkEventExpose *event)
+layout_draw_handler (GtkWidget *widget,
+                     cairo_t   *cr)
 {
   GtkLayout *layout = GTK_LAYOUT (widget);
   GdkWindow *bin_window = gtk_layout_get_bin_window (layout);
-  cairo_t *cr;
+  GdkRectangle clip;
 
-  gint i,j;
+  gint i, j, x, y;
   gint imin, imax, jmin, jmax;
 
-  if (event->window != bin_window)
+  if (!gtk_cairo_should_draw_window (cr, bin_window))
     return FALSE;
 
-  imin = (event->area.x) / 10;
-  imax = (event->area.x + event->area.width + 9) / 10;
+  gdk_window_get_position (bin_window, &x, &y);
+  cairo_translate (cr, x, y);
 
-  jmin = (event->area.y) / 10;
-  jmax = (event->area.y + event->area.height + 9) / 10;
+  gdk_cairo_get_clip_rectangle (cr, &clip);
 
-  cr = gdk_cairo_create (bin_window);
+  imin = (clip.x) / 10;
+  imax = (clip.x + clip.width + 9) / 10;
+
+  jmin = (clip.y) / 10;
+  jmax = (clip.y + clip.height + 9) / 10;
 
   for (i = imin; i < imax; i++)
     for (j = jmin; j < jmax; j++)
@@ -50,8 +53,6 @@ layout_expose_handler (GtkWidget      *widget,
 
   cairo_fill (cr);
 
-  cairo_destroy (cr);
-
   return FALSE;
 }
 
@@ -103,8 +104,8 @@ create_layout (GtkWidget *vbox)
   gtk_layout_set_vadjustment (layout, vadjustment);
 
   gtk_widget_set_events (layout_widget, GDK_EXPOSURE_MASK);
-  g_signal_connect (layout, "expose_event",
-                   G_CALLBACK (layout_expose_handler),
+  g_signal_connect (layout, "draw",
+                   G_CALLBACK (layout_draw_handler),
                     NULL);
 
   gtk_layout_set_size (layout, 1600, 128000);